package pe.com.astech.web.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import pe.com.astech.web.bean.DetalleOrdenTrabajoBean;
import pe.com.astech.web.bean.MaterialBean;
import pe.com.astech.web.bean.OrdenPedidoBean;
import pe.com.astech.web.bean.OrdenTrabajoBean;
import pe.com.astech.web.service.MaquinariaService;
import pe.com.astech.web.service.MaterialService;
import pe.com.astech.web.service.OrdenPedidoService;
import pe.com.astech.web.service.OrdenTrabajoService;
import pe.com.astech.web.util.Constantes;

@Controller
@RequestMapping(value = "/ordentrabajo.html")
public class OrdenTrabajoController {
	
	@Autowired
	OrdenTrabajoService ordenTrabajoService;
	@Autowired
	OrdenPedidoService ordenPedidoService;
	@Autowired
	MaterialService materialService;
	@Autowired
	MaquinariaService tipoMaquinariaService;
	
	private static final Log log = LogFactory.getLog(OrdenTrabajoController.class);
	
	@RequestMapping(method = RequestMethod.GET)
	public String showForm(ModelMap model) {
		String mensajeTrazabilidad = "metodo: showForm ordentrabajo";
		log.info(mensajeTrazabilidad);
		List<OrdenTrabajoBean> ordentrabajoListOrdenTrabajo = new ArrayList<OrdenTrabajoBean>();
		try {
			ordentrabajoListOrdenTrabajo = ordenTrabajoService.buscarOrdenTrabajo(mensajeTrazabilidad, Constantes.VACIO, Constantes.ESTADO_PROCESO);
		} catch (RuntimeException e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}catch (Exception e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		
		
		model.put("ordentrabajoListOrdenTrabajo", ordentrabajoListOrdenTrabajo);
		
		model.put("respuesta", "");
		
		return Constantes.FORM_ORDENTRABAJO;
	}
	
	@RequestMapping(params={"accion=buscarOrdenTrabajo","nombre","estado"})
	public String buscarOrdenTrabajo(ModelMap model,@RequestParam("nombre") String nombre,@RequestParam("estado") String estado) {
		
		String mensajeTrazabilidad = "metodo: buscarOrdenTrabajo ";
		log.info(mensajeTrazabilidad + " nombre(nroPedido) : " + nombre );
		log.info(mensajeTrazabilidad + " estado : " + estado );
		List<OrdenTrabajoBean> ordentrabajoListOrdenTrabajo = new ArrayList<OrdenTrabajoBean>();
		try {
			ordentrabajoListOrdenTrabajo = ordenTrabajoService.buscarOrdenTrabajo(mensajeTrazabilidad, nombre, estado);
		} catch (RuntimeException e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		
		model.put("ordentrabajoListOrdenTrabajo", ordentrabajoListOrdenTrabajo);
		
		return Constantes.FORM_ORDENTRABAJO;
	}
	
	@RequestMapping(params={"accion=nuevaOrdenTrabajo"})
	public String nuevaOrdenTrabajo(ModelMap model,HttpServletRequest request) {
		
		String mensajeTrazabilidad = "metodo: nuevaOrdenTrabajo ";
		log.info(mensajeTrazabilidad);
		OrdenTrabajoBean ordenTrabajoBean = new OrdenTrabajoBean();
		
		request.getSession(false).setAttribute("ordentrabajoListMateriales", ordenTrabajoBean.getListDetalleOT());
		request.getSession(false).setAttribute("ordenTrabajoBean", ordenTrabajoBean);
		List<OrdenPedidoBean> list = null;
		
		try {
			list = ordenPedidoService.obtenerPedidosLibres(mensajeTrazabilidad);
		} catch (RuntimeException e) {
			log.error(mensajeTrazabilidad + " ERROR: " + e.getMessage());
		}
		
		model.put("ordenTrabajoBean", ordenTrabajoBean);
		model.put("ordentrabajoListOrdenPedidoLibre", list);
		model.put("ordentrabajoListMateriales", ordenTrabajoBean.getListDetalleOT());
		
		return Constantes.FORM_NUEVAORDENTRABAJO;
	}
	
	@RequestMapping(params={"accion=nuevoMaterialOT"})
	public String nuevoMaterialOT(ModelMap model,HttpServletRequest request,@Valid OrdenTrabajoBean ordenTrabajoBean,
			BindingResult result) {
		
		String mensajeTrazabilidad = "metodo: nuevoMaterialOT ";
		log.info(mensajeTrazabilidad+ " ordenTrabajoBean.toString() : " + ordenTrabajoBean.toString());
		
		List<MaterialBean>list = new ArrayList<MaterialBean>();
		try {
			list = materialService.consultarMateriales(mensajeTrazabilidad, Constantes.VACIO);
			
			String ejemplo = ordenTrabajoBean.getEjemplo();
			ordenTrabajoBean.setEjemplo((ejemplo.equals(Constantes.TRUE))?Constantes.EJEMPLO_OT_OK:Constantes.EJEMPLO_OT_NOOK);
			
			request.getSession(false).setAttribute("ordenTrabajoBean", ordenTrabajoBean);
		} catch (RuntimeException e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR ", e);
		}
		DetalleOrdenTrabajoBean detalleOrdenTrabajoBean = new DetalleOrdenTrabajoBean();
		detalleOrdenTrabajoBean.setOrden_trabajo_id(ordenTrabajoBean.getId_orden_trabajo());
		
		model.put("ordentrabajoListMaterialOT", list);
		model.put("detalleOrdenTrabajoBean", detalleOrdenTrabajoBean);
		
		return Constantes.FORM_NUEVOMATERIAL_OT;
	}
	
	
	@RequestMapping(params={"accion=buscarDetalleOT"})
	public  String buscarDetalleOT(ModelMap model,HttpServletRequest request) {
		
		String mensajeTrazabilidad = "metodo: buscarDetalleOT ";
		log.info(mensajeTrazabilidad);
		List<DetalleOrdenTrabajoBean> ordentrabajoListMateriales = null;
		
		try {
			ordentrabajoListMateriales = (List<DetalleOrdenTrabajoBean>) request.getSession(false).getAttribute("ordentrabajoListMateriales");
			log.info(mensajeTrazabilidad + " tamanio de la lista " + ordentrabajoListMateriales.size());
		} catch (Exception e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		model.put("ordentrabajoListMateriales", ordentrabajoListMateriales);
		
		return Constantes.FORM_NUEVAORDENTRABAJO;
	}
	
	
	@RequestMapping(params={"accion=eliminarMaterialOT","id_material"})
	public String eliminarMaterialOT(ModelMap model,@RequestParam("id_material") String id_material,HttpServletRequest request) {
		
		String mensajeTrazabilidad = "metodo: eliminarMaterialOT ";
		log.info(mensajeTrazabilidad);
		Object[] listas =  new Object[Constantes.intDOS];
		try {
			List<DetalleOrdenTrabajoBean> ordentrabajoListMateriales = (List<DetalleOrdenTrabajoBean>) request.getSession(false).getAttribute("ordentrabajoListMateriales");
			List<DetalleOrdenTrabajoBean> ordentrabajoListMaterialesElim = (List<DetalleOrdenTrabajoBean>) request.getSession(false).getAttribute("ordentrabajoListMaterialesElim");
			listas = ordenTrabajoService.eliminarMaterialOTLista(mensajeTrazabilidad,id_material,ordentrabajoListMateriales,ordentrabajoListMaterialesElim);
		} catch (Exception e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		
		request.getSession(false).setAttribute("ordentrabajoListMateriales", (List<DetalleOrdenTrabajoBean>)listas[Constantes.intCERO]);
		request.getSession(false).setAttribute("ordentrabajoListMaterialesElim", (List<DetalleOrdenTrabajoBean>)listas[Constantes.intUNO]);
		
		model.put("ordentrabajoListMateriales", (List<DetalleOrdenTrabajoBean>)listas[Constantes.intCERO]);
		
		return Constantes.FORM_NUEVAORDENTRABAJO;
	}
	
	@RequestMapping(params={"accion=modificarMaterialOT"})
	public String modificarMaterialOT(ModelMap model,HttpServletRequest request,@Valid OrdenTrabajoBean ordenTrabajoBean,
			BindingResult result) {
		
		String mensajeTrazabilidad = "metodo: modificarMaterialOT ";
		log.info(mensajeTrazabilidad + " " + ordenTrabajoBean.toString());
		List<DetalleOrdenTrabajoBean> ordentrabajoListMateriales = null;
		DetalleOrdenTrabajoBean detalleOrdenTrabajoBean = new DetalleOrdenTrabajoBean();
		try {
			ordentrabajoListMateriales = (List<DetalleOrdenTrabajoBean>) request.getSession(false).getAttribute("ordentrabajoListMateriales");			
			detalleOrdenTrabajoBean = ordenTrabajoService.obtenerDetalleOTLista(mensajeTrazabilidad,ordenTrabajoBean.getMaterial_id(),ordentrabajoListMateriales);
			log.info(mensajeTrazabilidad + " detalleOrdenTrabajoBean.toString() " + detalleOrdenTrabajoBean.toString());
			request.getSession(false).setAttribute("ordenTrabajoBean", ordenTrabajoBean);
		} catch (Exception e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		
		model.put("detalleOrdenTrabajoBean", detalleOrdenTrabajoBean);
		
		return Constantes.FORM_NUEVOMATERIAL_OT;
	}
	
	
	@RequestMapping(params={"accion=guardarMaterialOT"})
	public String guardarMaterialOT(ModelMap model,HttpServletRequest request,@Valid DetalleOrdenTrabajoBean detalleOrdenTrabajoBean,
			BindingResult result) {
		
		String mensajeTrazabilidad = "metodo: guardarMaterialOT ";
		log.info(mensajeTrazabilidad + " " + detalleOrdenTrabajoBean.toString());
		String respuesta = Constantes.OK;
		List<DetalleOrdenTrabajoBean>ordentrabajoListMateriales = null;
		Object[] objetos = new Object[Constantes.intDOS];
		OrdenTrabajoBean ordenTrabajoBean = new OrdenTrabajoBean();
		List<OrdenPedidoBean> list = null;
		try {
			ordentrabajoListMateriales = (List<DetalleOrdenTrabajoBean>) request.getSession(false).getAttribute("ordentrabajoListMateriales");
			objetos = ordenTrabajoService.agregarMaterialOTLista(mensajeTrazabilidad,ordentrabajoListMateriales,detalleOrdenTrabajoBean);
			respuesta = (String)objetos[Constantes.intUNO];
			ordenTrabajoBean = (OrdenTrabajoBean) request.getSession(false).getAttribute("ordenTrabajoBean");
			
			list = (List<OrdenPedidoBean>) request.getSession(false).getAttribute("ordentrabajoListOrdenPedidoLibre");
		} catch (Exception e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR ", e);
			objetos[Constantes.intCERO] = ordentrabajoListMateriales;
			respuesta = Constantes.NOOK;
		}
		
		if(respuesta.equals(Constantes.OK)){
			request.getSession(false).setAttribute("ordentrabajoListMateriales", (List<DetalleOrdenTrabajoBean>) objetos[Constantes.intCERO]);
		}
		
		
		model.put("respuesta", respuesta);
		model.put("ordenTrabajoBean", ordenTrabajoBean);
		model.put("ordentrabajoListMateriales", (List<DetalleOrdenTrabajoBean>) objetos[Constantes.intCERO]);
		model.put("ordentrabajoListOrdenPedidoLibre", list);
		
		String rpta = Constantes.FORM_NUEVAORDENTRABAJO;
		
		if(ordenTrabajoBean.getOpcion().equals(Constantes.ACTUALIZAR)) rpta = Constantes.FORM_MODIFICARORDENTRABAJO;
		
		return rpta;
	}
	
	
	
	@RequestMapping(params={"accion=actualizarMaterialOT"})
	public String actualizarMaterialOT(ModelMap model,
			HttpServletRequest request,@Valid DetalleOrdenTrabajoBean detalleOrdenTrabajoBean,
			BindingResult resul) {
		
		String mensajeTrazabilidad = "metodo: actualizarMaterialOT ";
		log.info(mensajeTrazabilidad + " " + detalleOrdenTrabajoBean.toString());
		String respuesta = Constantes.OK;
		List<DetalleOrdenTrabajoBean> ordentrabajoListMateriales = null;
		OrdenTrabajoBean ordenTrabajoBean = new OrdenTrabajoBean();
		List<OrdenPedidoBean> list = null;
		
		try {
			ordentrabajoListMateriales = (List<DetalleOrdenTrabajoBean>) request.getSession(false).getAttribute("ordentrabajoListMateriales");
			ordentrabajoListMateriales = ordenTrabajoService.actualizarMaterialOTLista(mensajeTrazabilidad,ordentrabajoListMateriales,detalleOrdenTrabajoBean);
			ordenTrabajoBean = (OrdenTrabajoBean) request.getSession(false).getAttribute("ordenTrabajoBean");
			list = (List<OrdenPedidoBean>) request.getSession(false).getAttribute("ordentrabajoListOrdenPedidoLibre");
		} catch (Exception e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e);
			respuesta = Constantes.NOOK;
		}
		model.put("ordentrabajoListOrdenPedidoLibre", list);
		model.put("ordenTrabajoBean", ordenTrabajoBean);
		model.put("respuesta", respuesta);
		model.put("ordentrabajoListMateriales", (List<DetalleOrdenTrabajoBean>) ordentrabajoListMateriales);
		request.getSession(false).setAttribute("ordentrabajoListMateriales", ordentrabajoListMateriales);
		
		String rpta = Constantes.FORM_NUEVAORDENTRABAJO;
		
		if(ordenTrabajoBean.getOpcion().equals(Constantes.ACTUALIZAR)) rpta = Constantes.FORM_MODIFICARORDENTRABAJO;
		
		return rpta;
	}
	
	
	@RequestMapping(params={"accion=guardarOrdenTrabajo"},method = RequestMethod.POST)
	public String guardarOrdenTrabajo(ModelMap model,HttpServletRequest request,@Valid OrdenTrabajoBean ordenTrabajoBean,
			BindingResult result) {
		String mensajeTrazabilidad = "metodo: guardarOrdenTrabajo";
		log.info(mensajeTrazabilidad + " " + ordenTrabajoBean.toString());
		
		String respuesta = Constantes.OK;
		Object[] respuestas = new Object[Constantes.intTRES];
		
		
		if(result.hasErrors()){
			log.info(mensajeTrazabilidad + " Existen Errores ");
			for(FieldError error:result.getFieldErrors()){
				log.info(mensajeTrazabilidad + " " + "error"+error.getField() + " " + error.getDefaultMessage());
				model.addAttribute("error"+error.getField(), error.getDefaultMessage());
			}
			
			List<OrdenPedidoBean> list = null;
			List<DetalleOrdenTrabajoBean>ordentrabajoListMateriales =null;
			try {
				list = ordenPedidoService.obtenerPedidosLibres(mensajeTrazabilidad);
				ordentrabajoListMateriales = (List<DetalleOrdenTrabajoBean>) request.getSession(false).getAttribute("ordentrabajoListMateriales");
			} catch (RuntimeException e) {
				log.error(mensajeTrazabilidad + " ERROR: " + e.getMessage());
			}
			
			model.put("ordenTrabajoBean", ordenTrabajoBean);
			model.put("ordentrabajoListOrdenPedidoLibre", list);
			model.put("ordentrabajoListMateriales", ordentrabajoListMateriales);
						
			return Constantes.FORM_NUEVAORDENTRABAJO;
		}
		
		try {
			List<DetalleOrdenTrabajoBean>ordentrabajoListMateriales = (List<DetalleOrdenTrabajoBean>) request.getSession(false).getAttribute("ordentrabajoListMateriales");
			respuestas = ordenTrabajoService.guardarOT(mensajeTrazabilidad,ordenTrabajoBean,ordentrabajoListMateriales);
			respuesta = (String)respuestas[Constantes.intDOS];
		} catch (RuntimeException e) {
			respuesta = Constantes.NOOK;
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}		
			
		
		model.put("respuesta", respuesta);
		model.put("nroOT", (String)respuestas[Constantes.intCERO]);
		model.put("ordentrabajoListOrdenTrabajo", (List<OrdenTrabajoBean>)respuestas[Constantes.intUNO]);
		
		return Constantes.FORM_ORDENTRABAJO;
	}
		
	@RequestMapping(params={"accion=modificarOT","id_orden_trabajo"})
	public String modificarOT(ModelMap model,HttpServletRequest request,@RequestParam("id_orden_trabajo") String id_orden_trabajo) {
		String mensajeTrazabilidad = "metodo: modificarOT";
		log.info(mensajeTrazabilidad + " " + id_orden_trabajo);
		
		String respuesta = Constantes.OK;
		OrdenTrabajoBean ordenTrabajoBean = new OrdenTrabajoBean();
		List<OrdenPedidoBean> list = null;
		
		try {
			ordenTrabajoBean = ordenTrabajoService.obtenerOTbyId(mensajeTrazabilidad,id_orden_trabajo);
			list = ordenPedidoService.obtenerPedidosLibresYModificados(mensajeTrazabilidad,ordenTrabajoBean);
		} catch (RuntimeException e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e);
		}
		catch (Exception e) {
			log.info(mensajeTrazabilidad + " Ocurrio un ERROR " + e);
		}
		
		
		model.put("ordentrabajoListOrdenPedidoLibre", list);
		
		model.put("ordenTrabajoBean", ordenTrabajoBean);
		model.put("ordentrabajoListMateriales", ordenTrabajoBean.getListDetalleOT());
		request.getSession(false).setAttribute("ordentrabajoListMateriales", ordenTrabajoBean.getListDetalleOT());
		request.getSession(false).setAttribute("ordentrabajoListOrdenPedidoLibre", list);
		
		return Constantes.FORM_MODIFICARORDENTRABAJO;
	}
	
	
	@RequestMapping(params={"accion=actualizarOrdenTrabajo"})
	public String actualizarOrdenTrabajo(ModelMap model,HttpServletRequest request,@Valid OrdenTrabajoBean ordenTrabajoBean,
			BindingResult result) {
		String mensajeTrazabilidad = "metodo: actualizarOrdenTrabajo";
		log.info(mensajeTrazabilidad + " " + ordenTrabajoBean.toString());
		
		String respuesta = Constantes.OK;
		Object[] respuestas = new Object[Constantes.intDOS];
		
		if(result.hasErrors()){
			log.info(mensajeTrazabilidad + " Existen Errores ");
			for(FieldError error:result.getFieldErrors()){
				log.info(mensajeTrazabilidad + " " + "error"+error.getField() + " " + error.getDefaultMessage());
				model.addAttribute("error"+error.getField(), error.getDefaultMessage());
			}
			List<OrdenPedidoBean> list = null;
			List<DetalleOrdenTrabajoBean>ordentrabajoListMateriales =null;
			try {
				ordentrabajoListMateriales = (List<DetalleOrdenTrabajoBean>) request.getSession(false).getAttribute("ordentrabajoListMateriales");
				list = (List<OrdenPedidoBean>) request.getSession(false).getAttribute("ordentrabajoListOrdenPedidoLibre");
			} catch (RuntimeException e) {
				log.error(mensajeTrazabilidad + " ERROR: " + e.getMessage());
			}
			
			model.put("ordentrabajoListOrdenPedidoLibre", list);
			model.put("ordenTrabajoBean", ordenTrabajoBean);
			model.put("ordentrabajoListMateriales", ordentrabajoListMateriales);
						
			return Constantes.FORM_MODIFICARORDENTRABAJO;
		}
		
		try {
			List<DetalleOrdenTrabajoBean>ordentrabajoListMateriales = (List<DetalleOrdenTrabajoBean>) request.getSession(false).getAttribute("ordentrabajoListMateriales");
			List<DetalleOrdenTrabajoBean>ordentrabajoListMaterialesElim = (List<DetalleOrdenTrabajoBean>) request.getSession(false).getAttribute("ordentrabajoListMaterialesElim");
			respuestas = ordenTrabajoService.actualizarOT(mensajeTrazabilidad,ordenTrabajoBean,ordentrabajoListMateriales,ordentrabajoListMaterialesElim);
			respuesta = (String)respuestas[Constantes.intUNO];
		} catch (RuntimeException e) {
			respuesta = Constantes.NOOK;
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
				
		model.put("respuesta", respuesta);
		model.put("ordentrabajoListOrdenTrabajo", (List<OrdenTrabajoBean>)respuestas[Constantes.intCERO]);
		
		return Constantes.FORM_ORDENTRABAJO;
	}
	
	
	@RequestMapping(params={"accion=cargarEjemploOT","orden_pedido_ID"})
	public String cargarEjemploOT(ModelMap model,HttpServletRequest request,@RequestParam("orden_pedido_ID") String orden_pedido_ID) {
		
		String mensajeTrazabilidad = "metodo: cargarEjemploOT ";
		log.info(mensajeTrazabilidad + " orden_pedido_ID : " + orden_pedido_ID );
		List<DetalleOrdenTrabajoBean> detalleordentrabajoListOrdenTrabajo = new ArrayList<DetalleOrdenTrabajoBean>();
		try {
			
			detalleordentrabajoListOrdenTrabajo = ordenTrabajoService.cargarEjemploOT(mensajeTrazabilidad, orden_pedido_ID);
		} catch (RuntimeException e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		
		request.getSession(false).setAttribute("ordentrabajoListMateriales", detalleordentrabajoListOrdenTrabajo);
		model.put("ordentrabajoListMateriales", detalleordentrabajoListOrdenTrabajo);
		
		return Constantes.FORM_NUEVAORDENTRABAJO;
	}
	
	
	@RequestMapping(params={"accion=eliminarOT","id_orden_trabajo"})
	public String eliminarOT(ModelMap model,HttpServletRequest request,@RequestParam("id_orden_trabajo") String id_orden_trabajo) {
		String mensajeTrazabilidad = "metodo: eliminarOT";
		log.info(mensajeTrazabilidad + " " + id_orden_trabajo);
		
		List<OrdenTrabajoBean> ordentrabajoListOrdenTrabajo = new ArrayList<OrdenTrabajoBean>();
		
		try {
			ordentrabajoListOrdenTrabajo = ordenTrabajoService.eliminarOT(mensajeTrazabilidad,id_orden_trabajo);
		} catch (RuntimeException e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		catch (Exception e) {
			log.info(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		
		
		model.put("ordentrabajoListOrdenTrabajo", ordentrabajoListOrdenTrabajo);
		
		return Constantes.FORM_ORDENTRABAJO;
	}
	
	@RequestMapping(params={"accion=visualizarOT","id_orden_trabajo"})
	public String visualizarOT(ModelMap model,HttpServletRequest request,@RequestParam("id_orden_trabajo") String id_orden_trabajo) {
		String mensajeTrazabilidad = "metodo: visualizarOT";
		log.info(mensajeTrazabilidad + " " + id_orden_trabajo);
		
		String respuesta = Constantes.OK;
		OrdenTrabajoBean ordenTrabajoBean = new OrdenTrabajoBean();
		List<OrdenPedidoBean> list = null;
		
		try {
			ordenTrabajoBean = ordenTrabajoService.obtenerOTbyId(mensajeTrazabilidad,id_orden_trabajo);
			list = ordenPedidoService.obtenerPedidosLibresYModificados(mensajeTrazabilidad,ordenTrabajoBean);
		} catch (RuntimeException e) {
			log.error(mensajeTrazabilidad + " Ocurrio un ERROR " + e.getMessage());
		}
		
		model.put("ordentrabajoListOrdenPedidoLibre", list);
		
		model.put("ordenTrabajoBean", ordenTrabajoBean);
		model.put("ordentrabajoListMateriales", ordenTrabajoBean.getListDetalleOT());
		request.getSession(false).setAttribute("ordentrabajoListMateriales", ordenTrabajoBean.getListDetalleOT());
		
		return Constantes.FORM_VISUALIZARORDENTRABAJO;
	}
}
